]> git.r.bdr.sh - rbdr/Flat-Bezel.qsplugin/blobdiff - Flat Bezel/FlatBezelObjectCell.swift
Improve drawing, add padding to bezel
[rbdr/Flat-Bezel.qsplugin] / Flat Bezel / FlatBezelObjectCell.swift
diff --git a/Flat Bezel/FlatBezelObjectCell.swift b/Flat Bezel/FlatBezelObjectCell.swift
new file mode 100644 (file)
index 0000000..211f332
--- /dev/null
@@ -0,0 +1,133 @@
+//
+//  FlatBezelObjectCell.swift
+//  Flat Bezel
+//
+//  Created by Ruben Beltran del Rio on 2/8/23.
+//  Copyright © 2023 BRNBW. All rights reserved.
+//
+/*
+import Foundation
+import Cocoa
+
+class FlatBezelObjectCell: QSObjectCell {
+  let preferredImagePosition: NSControl.ImagePosition = .imageAbove
+  
+  override func draw(withFrame cellFrame: NSRect, in controlView: NSView!) {
+    let isFirstResponder = controlView.window?.firstResponder == controlView && !controlView.isKind(of: NSTableView.self)
+    
+    let dropTarget = self.isHighlighted && self.highlightsBy.contains(NSCell.StyleMask.changeBackgroundCellMask) && !self.isBezeled
+    
+    var fillColor: NSColor = self.backgroundColor ?? .textBackgroundColor
+    if (isFirstResponder) {
+      fillColor = self.highlightColor()
+    }
+    if (dropTarget) {
+      fillColor = NSColor(red: 0.77, green: 0.91, blue: 0.96, alpha: 1)
+    }
+    
+    var strokeColor: NSColor = .clear
+    
+    fillColor.setFill()
+    strokeColor.setStroke()
+    
+    let roundRect = NSBezierPath()
+    roundRect.appendRoundedRect(cellFrame, xRadius: cellRadiusFactor(), yRadius: cellRadiusFactor())
+    roundRect.fill()
+    
+    self.drawInterior(withFrame: self.drawingRect(forBounds: cellFrame), in: controlView)
+  }
+  
+  override func titleRect(forBounds rect: NSRect) -> NSRect {
+    super.titleRect(forBounds: rect.offsetBy(dx: 0, dy: -4))
+  }
+  
+  override func drawText(for drawObject: QSObject!, withFrame cellFrame: NSRect, in controlView: NSView!) {
+    if self.imagePosition == .imageOnly {
+      return;
+    }
+    
+    var abbrString: String? = nil
+    if controlView.responds(to: #selector(QSSearchObjectView.matchedString)) {
+      abbrString = (controlView as! QSSearchObjectView).matchedString()
+    }
+    
+    var nameString: String? = drawObject.displayName()
+    var hitMask: AutoreleasingUnsafeMutablePointer<NSIndexSet?>? = nil
+    
+    var ranker = drawObject.ranker()
+    if let ranker, let abbrString {
+      nameString = ranker.matchedString(forAbbreviation: abbrString, hitmask: hitMask, inContext: nil)
+    }
+    
+    var rankedStringIsName = nameString == drawObject.displayName()
+    if nameString == nil {
+      nameString = drawObject.identifier() ?? "Unknown"
+    }
+    
+    var useAlternateColor = false
+    if let controlView = controlView as? NSTableView {
+      useAlternateColor = controlView.isRowSelected(controlView.row(at: cellFrame.origin))
+    }
+    
+    var mainColor: NSColor? = textColor()
+    if mainColor == nil {
+      mainColor = useAlternateColor ? .alternateSelectedControlTextColor : .controlTextColor
+    }
+    
+    var fadedColor = mainColor!.withAlphaComponent(0.50)
+    var textDrawRect = titleRect(forBounds: cellFrame)
+    
+    var titleString = NSMutableAttributedString(string: nameString!)
+    titleString.setAttributes(rankedStringIsName ? nameAttributes : detailAttributes, range: NSMakeRange(0, titleString.length))
+    
+    if abbrString != nil && abbrString!.hasPrefix("QSActionMnemonic") {
+      titleString.addAttribute(.foregroundColor, value: rankedStringIsName ? fadedColor : fadedColor.withAlphaComponent(0.8), range: NSMakeRange(0, titleString.length))
+    } else {
+      var i = 0
+      var j = 0
+      var hits: [Int] = []
+      count = hitMask?.
+    }
+  }
+}
+
+
+    NSUInteger i = 0;
+    NSUInteger j = 0;
+    NSUInteger hits[[titleString length]];
+    NSUInteger count = [hitMask getIndexes:(NSUInteger *)&hits maxCount:[titleString length] inIndexRange:nil];
+    NSDictionary *attributes = @{
+      NSForegroundColorAttributeName:                                 rankedStringIsName ? mainColor : fadedColor
+    };
+    for(i = 0; i<count; i += j) {
+      for (j = 1; i+j<count && hits[i+j-1] +1 == hits[i+j]; j++);
+      [titleString addAttributes:attributes range:NSMakeRange(hits[i], j)];
+    }
+  } else {
+    [titleString addAttribute:NSBaselineOffsetAttributeName value:[NSNumber numberWithDouble:-1.0] range:NSMakeRange(0, [titleString length])];
+  }
+
+  if (showDetails) {
+    NSString *detailsString = [drawObject details];
+    
+    NSRange returnRange = [detailsString rangeOfString:@"\n"];
+    if (returnRange.location != NSNotFound) {
+      detailsString = [detailsString substringToIndex:returnRange.location];
+    }
+
+    detailsAttributes = [detailsAttributes mutableCopy];
+    [detailsAttributes setValue:[NSColor grayColor] forKey:NSForegroundColorAttributeName];
+    
+    if (detailsString && detailsString.length && ![detailsString isEqualToString:nameString]) {
+      [titleString appendAttributedString:[[[NSAttributedString alloc] initWithString:[NSString stringWithFormat:@"\n%@",detailsString] attributes:detailsAttributes] autorelease]];
+    }
+  }
+
+  NSRect centerRect = rectFromSize([titleString size]);
+  centerRect.size.width = NSWidth(textDrawRect);
+  centerRect.size.height = MIN(NSHeight(textDrawRect), centerRect.size.height);
+  [titleString drawInRect:centerRectInRect(centerRect, textDrawRect)];
+}
+
+@end
+*/